// 租户管理类型定义

// 租户类型
export interface Tenant {
  id: string;
  code: string;                    // 租户代码，如 'company_a', 'org_b'
  name: string;                    // 租户名称，如 '阿里巴巴', '腾讯科技'
  domain?: string;                 // 租户域名，如 'alibaba.v3cloud.com'
  logo?: string;                   // 租户logo
  description?: string;            // 租户描述
  industry?: string;               // 所属行业
  scale: 'startup' | 'sme' | 'enterprise' | 'large'; // 企业规模
  
  // 租户配置
  config: TenantConfig;
  
  // 订阅信息
  subscription: TenantSubscription;
  
  // 状态信息
  status: 'active' | 'inactive' | 'suspended' | 'expired';
  
  // 联系信息
  contact: TenantContact;
  
  // 资源配额
  quota: TenantQuota;
  
  // 审计信息
  createTime: string;
  updateTime: string;
  createdBy: string;
  lastActiveTime?: string;
}

// 租户配置
export interface TenantConfig {
  // 功能开关
  features: {
    multiLanguage: boolean;          // 多语言支持
    customTheme: boolean;            // 自定义主题
    advancedReports: boolean;        // 高级报表
    apiAccess: boolean;              // API访问
    sso: boolean;                    // 单点登录
    audit: boolean;                  // 审计日志
  };
  
  // 安全配置
  security: {
    passwordPolicy: PasswordPolicy;   // 密码策略
    sessionTimeout: number;           // 会话超时(分钟)
    maxLoginAttempts: number;         // 最大登录尝试次数
    ipWhitelist?: string[];           // IP白名单
    requireMFA: boolean;              // 强制多因子认证
  };
  
  // 界面配置
  ui: {
    theme: 'light' | 'dark' | 'auto';
    primaryColor: string;
    logo?: string;
    favicon?: string;
    customCss?: string;
  };
  
  // 业务配置
  business: {
    timezone: string;                 // 时区
    dateFormat: string;               // 日期格式
    numberFormat: string;             // 数字格式
    currency: string;                 // 货币单位
    language: string;                 // 默认语言
  };
}

// 密码策略
export interface PasswordPolicy {
  minLength: number;
  requireUppercase: boolean;
  requireLowercase: boolean;
  requireNumbers: boolean;
  requireSpecialChars: boolean;
  expiryDays?: number;
  historyCount?: number;
}

// 租户订阅信息
export interface TenantSubscription {
  plan: 'free' | 'basic' | 'professional' | 'enterprise';
  startDate: string;
  endDate?: string;
  autoRenewal: boolean;
  billingCycle: 'monthly' | 'quarterly' | 'yearly';
  price: number;
  currency: string;
  status: 'active' | 'trial' | 'overdue' | 'cancelled';
}

// 租户联系信息
export interface TenantContact {
  adminName: string;
  adminEmail: string;
  adminPhone?: string;
  companyAddress?: string;
  companyPhone?: string;
  companyEmail?: string;
  billingContact?: {
    name: string;
    email: string;
    phone?: string;
  };
}

// 租户资源配额
export interface TenantQuota {
  maxUsers: number;                 // 最大用户数
  maxDepartments: number;           // 最大部门数
  maxRoles: number;                 // 最大角色数
  maxTeams: number;                 // 最大团队数
  storageLimit: number;             // 存储限制(GB)
  apiCallsPerDay: number;           // 每日API调用限制
  concurrentSessions: number;       // 并发会话数限制
  
  // 当前使用量
  currentUsers: number;
  currentDepartments: number;
  currentRoles: number;
  currentTeams: number;
  currentStorage: number;
  todayApiCalls: number;
  activeSessions: number;
}

// 租户统计信息
export interface TenantStats {
  totalUsers: number;
  activeUsers: number;
  totalDepartments: number;
  totalRoles: number;
  totalTeams: number;
  storageUsed: number;
  lastLoginTime?: string;
  createdDays: number;
}

// 多租户用户类型（扩展原有User）
export interface TenantUser {
  id: string;
  tenantId: string;                 // 所属租户ID
  username: string;
  email: string;
  realName?: string;
  avatar?: string;
  phone?: string;
  
  // 租户内的权限
  roles: string[];                  // 用户直接分配的角色ID列表
  teamIds: string[];                // 用户所属的团队ID列表
  departmentId?: string;            // 用户所属部门ID
  
  // 跨租户权限（仅限平台管理员）
  isSuperAdmin: boolean;            // 是否为超级管理员
  accessibleTenants?: string[];     // 可访问的租户列表
  
  status: 'active' | 'inactive' | 'locked';
  lastLoginTime?: string;
  createTime: string;
  updateTime: string;
}

// 租户角色类型（扩展原有Role）
export interface TenantRole {
  id: string;
  tenantId: string;                 // 所属租户ID
  code: string;
  name: string;
  description?: string;
  permissions: TenantPermission[];  // 使用增强的权限模型
  scope: 'tenant' | 'global';      // 角色作用域
  isBuiltin: boolean;               // 是否为内置角色
  status: 'active' | 'inactive';
  createTime: string;
  updateTime: string;
  createdBy: string;
}

// 增强的权限类型（支持租户隔离）
export interface TenantPermission {
  id: string;
  tenantId?: string;                // 租户ID，null表示平台级权限
  code: string;
  name: string;
  description?: string;
  category: string;
  resource: string;
  action: string;
  
  // 权限作用域和条件
  scope: 'global' | 'tenant' | 'organization' | 'department' | 'team' | 'owner' | 'custom';
  conditions?: PermissionCondition[];
  
  // 租户相关属性
  isBuiltin: boolean;               // 是否为内置权限
  level: 'platform' | 'tenant' | 'business'; // 权限级别
  
  createTime: string;
  updateTime: string;
}

// 权限条件（支持租户上下文）
export interface PermissionCondition {
  field: string;                    // 条件字段，如 'tenantId', 'department', 'status'
  operator: '=' | '!=' | 'in' | 'not_in' | '>' | '<' | 'contains';
  value: any;                       // 条件值
  contextField?: string;            // 从上下文获取值的字段名
  description?: string;             // 条件描述
}

// 租户部门类型（扩展原有Department）
export interface TenantDepartment {
  id: string;
  tenantId: string;                 // 所属租户ID
  code: string;
  name: string;
  description?: string;
  parentId?: string;
  level: number;
  sort: number;
  manager?: string;
  memberCount: number;
  status: 'active' | 'inactive';
  createTime: string;
  updateTime: string;
  createdBy: string;
  children?: TenantDepartment[];
}

// 租户团队类型（扩展原有Team）
export interface TenantTeam {
  id: string;
  tenantId: string;                 // 所属租户ID
  code: string;
  name: string;
  description?: string;
  departmentId?: string;
  parentId?: string;
  level: number;
  memberCount: number;
  status: 'active' | 'inactive';
  createTime: string;
  updateTime: string;
  createdBy: string;
}

// 租户菜单类型（扩展原有Menu）
export interface TenantMenu {
  id: string;
  tenantId?: string;                // 租户ID，null表示平台级菜单
  code: string;
  name: string;
  path: string;
  component?: string;
  icon?: string;
  parentId?: string;
  level: number;
  sort: number;
  type: 'menu' | 'button' | 'api';
  permissions: string[];
  visible: boolean;
  status: 'active' | 'inactive';
  isBuiltin: boolean;               // 是否为内置菜单
  tenantCustomizable: boolean;      // 租户是否可自定义
  children?: TenantMenu[];
  createTime: string;
  updateTime: string;
}

// 租户表单数据
export interface TenantForm {
  name: string;
  code: string;
  domain?: string;
  description?: string;
  industry?: string;
  scale: 'startup' | 'sme' | 'enterprise' | 'large';
  
  // 管理员信息
  adminName: string;
  adminEmail: string;
  adminPhone?: string;
  
  // 订阅信息
  plan: 'free' | 'basic' | 'professional' | 'enterprise';
  billingCycle: 'monthly' | 'quarterly' | 'yearly';
  
  // 配额设置
  maxUsers: number;
  maxDepartments: number;
  storageLimit: number;
  
  status: 'active' | 'inactive';
}

// 租户切换上下文
export interface TenantContext {
  currentTenant: Tenant | null;
  accessibleTenants: Tenant[];
  isLoading: boolean;
  switchTenant: (tenantId: string) => Promise<void>;
  refreshTenants: () => Promise<void>;
}

// 租户权限验证上下文
export interface TenantPermissionContext {
  tenantId: string;
  userId: string;
  resourceId?: string;
  resourceData?: Record<string, any>;
  userContext?: Record<string, any>;
  tenantContext?: Record<string, any>;
  operationContext?: Record<string, any>;
}

// 租户权限验证结果
export interface TenantPermissionResult {
  granted: boolean;
  reason?: string;
  missingPermissions?: string[];
  scope?: string;
  conditions?: PermissionCondition[];
}

// 租户登录相关类型
export interface TenantLoginRequest {
  tenantCode: string;              // 租户代码
  username: string;                // 用户名
  password: string;                // 密码
  captcha?: string;                // 验证码
  rememberMe?: boolean;            // 记住登录
}

export interface TenantLoginResponse {
  token: string;                   // JWT token
  user: TenantUser;                // 用户信息
  tenant: Tenant;                  // 租户信息
  accessibleTenants: Tenant[];     // 用户可访问的租户列表
}

// 公开租户信息（用于租户选择器等公开场景）
export interface PublicTenant {
  id: string;
  code: string;
  name: string;
  logo?: string;
  domain?: string;
  status: 'active' | 'inactive' | 'suspended' | 'expired';
}